package com.nmgolden.lanxin.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 应用卡片消息体
 *
 * @author siger
 * @created 2023/10/25
 */
@Data
@Builder
public class AppCardMsgDataInfo implements MsgDataInfo{
    /**
     * 应用的title
     */
    private String headTitle;

    /**
     * 应用的title图片media的openId
     */
    private String headIconId;

    /**
     * icon的网络地址
     */
    private String headIconUrl;

    /**
     * 是否动态卡片消息，一般用于审批类卡片消息需要变更状态的场景，结合更新动态卡片消息状态接口，使用DynamicMsg appCard消息类型对动态卡片消息状态和部分内容进行动态更新。
     */
    private Boolean isDynamic;

    /**
     * 动态卡片的动态信息区，当isDynamic=true时必填。
     */
    private HeadStatusInfo headStatusInfo;

    /**
     * 文本标题（长度限制600字节）
     */
    private String bodyTitle;

    /**
     * 文本副标题，两行（接口限制1200字节）
     */
    private String bodySubTitle;

    /**
     * 松散内容，八行（3000字节）。
     */
    private String bodyContent;

    /**
     * 署名字段（长度限制96个字节）
     */
    private String signature;

    /**
     * 人员ID，用于卡片消息中展示消息发起者头像，可不填。
     */
    private String staffId;

    /**
     * key /value为依赖关系，上限10对。
     */
    private List<KeyValueWrap> fields;

    /**
     * 此处title与url字段数据相互依赖，不可单独存在；最多3对。
     */
    private List<Link> links;

    /**
     * 本条消息的跳转地址；当本链接地址为空，有其他链接地址时，用其他链接地址的第一条自动填到基本链接地址。
     */
    private String cardLink;

    /**
     * PC端跳转地址，可不填。
     */
    private String pcCardLink;

    @Override
    public MsgType getMsgType() {
        return MsgType.appCard;
    }

    @Data
    public static class HeadStatusInfo {
        /**
         * 状态icon的网络下载地址，和下文的colour字段互斥，colour值为空时，此字段才会生效。
         */
        private String iconLink;

        /**
         * 卡片头部状态描述 （长度不超过30字节）。如果isDynamic=ture, 则该字段属于必填项。
         */
        private String description;

        /**
         * 状态描述信息头部的实心圆颜色，和iconLink互斥，colour值不为空时优先展示实心圆。
         */
        private String colour;

    }


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Link {
        private String title;
        private String url;
    }
}
